public class Test3 {
    public static void main(String[] args) {
        //4.已知有个升序的数组，要求插入一个元素，该数组顺序依然是升序,比如:
        //[10，12，45，90]，添加23后,数组为[10，12，23，45，90]

        int[] arr = {10, 12, 45, 90};
        int insertNum = 23;//要插入的数
           /*   思路 本质数组扩容 + 定位
                1.我们先确定 添加数应该插入到哪个索引
                2.然后扩容
           */
        int index=-1;//index就是要插入的位置
        //遍历 arr数组,如果发现 insertNum<=arr[i]，说明 i 就是要插入的位置
        // 使用 index 保留 index = i;
        // 如果遍历完后，没有发现 insertNum<=arr[i],说明 index= arr.length
        // 即:添加到arr的最后
        for (int i = 0; i < arr.length; i++) {
            if (insertNum <= arr[i]) {
                index = i;
                break;//找到位置，就退出循环
            }
        }
        if (index == -1) {//没有找到位置
            index = arr.length;//添加到最后
        }
        //System.out.println("index=" + index);//测试
        //扩容
        int[] newArr = new int[arr.length + 1];//扩容
        //将arr数组中的元素拷贝到 newArr中
        for (int i = 0,j = 0; i < newArr.length; i++) {
            if ( i != index) {//不是要插入的位置
                newArr[i] = arr[j];//直接拷贝
                j++;//arr数组向后移动一位
            }else{
                newArr[i] = insertNum;//i这个位置就是要插入的数

            }
        }
        //让arr指向newArr，原来的数组，就会成为垃圾，被销毁
        arr = newArr;
        System.out.println("======插入后，arr数组的情况======");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}
